package com.dc.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.dc.constat.SystemConstant;
import com.dc.entity.SysConfig;
import com.dc.entity.ro.SysConfigRO;
import com.dc.mapper.SysConfigMapper;
import com.dc.service.SysConfigService;
import com.dc.util.RedisUtil;
import com.dc.common.ResponseResultVO;
import com.dc.vo.SysConfigVO;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

import static com.dc.common.ResponseResultVO.checkParameterIsNotNull;
import static com.dc.common.ResponseResultVO.updateResult;

/**
 * 字典管理
 */
@Service
public class SysConfigServiceImpl  implements SysConfigService {

    @Resource
    SysConfigMapper sysConfigMapper;

    @Resource
    RedisUtil redisUtil;

    @Override
    public String getConfigValue(String key) {
        if (StrUtil.isEmpty(key)) {
            return null;
        }
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("config_key", key);
        SysConfig sysConfig = sysConfigMapper.selectOne(queryWrapper);
        return ObjectUtil.isNull(sysConfig) ? null : sysConfig.getConfigValue();
    }

    @Override
    public ResponseResultVO selectConfigList() {
        List<SysConfig> list = sysConfigMapper.selectList(new QueryWrapper<SysConfig>().orderByDesc("sort"));
        return ResponseResultVO.successResult(list);
    }

    @Override
    public ResponseResultVO updateConfig(SysConfigRO sysConfigRO) {
        checkParameterIsNotNull(String.valueOf(sysConfigRO.getId()), "id不能为空");
        SysConfig sysConfig = sysConfigMapper.selectById(sysConfigRO.getId());
        if(sysConfig == null){
            return ResponseResultVO.failResult("该配置不存在");
        }
        SysConfig dto = new SysConfig();
        dto.setId(sysConfigRO.getId());
        dto.setConfigValue(sysConfigRO.getConfigValue());
        int i = sysConfigMapper.updateById(dto);
        if(i > 0){
            SysConfig configDTONew = sysConfigMapper.selectById(sysConfigRO.getId());
            //表示更新成功 ， 需要更新reids的值
            if (redisUtil.hasKey(SystemConstant.REDIS_CONFIG + configDTONew.getConfigKey())) {
                SysConfigVO sysConfigVO = new SysConfigVO();
                BeanUtil.copyProperties(configDTONew, sysConfigVO);
                redisUtil.set(SystemConstant.REDIS_CONFIG + sysConfig.getConfigKey(), sysConfigVO);
            }
        }
        return updateResult(i);
    }

    @Override
    public ResponseResultVO selectValueByKey(String key) {
        checkParameterIsNotNull(key, "key不能为空");
        SysConfig sysConfig = sysConfigMapper.selectOne(new QueryWrapper<SysConfig>().eq("config_key", key));
        if(sysConfig == null){
            return ResponseResultVO.failResult("无此数据");
        }
        return ResponseResultVO.successResult(sysConfig);
    }
}
